#!/bin/bash

# Fedora GNOME 42 初始化优化配置脚本
# 功能：自动安装并配置加速镜像、工具、依赖包
# 使用方法：chmod +x jetbrains-vmoptions.sh && ./jetbrains-vmoptions.sh

# 更新系统并升级所有已安装的包
echo "开始更新系统并升级所有已安装的包..."
sudo dnf update --refresh -y
echo "系统更新、升级完成..."


# 使用 bun 创建一个基于 TypeScript、Vue3、Vite 的项目
# cd ~/公共/TypeScript
bun create vite --help
bun create vite --template vue-ts bun-app-demo
cd bun-app-demo && bun install
bun run --bun dev


# 启用第三方优质库	https://copr.fedorainfracloud.org
# https://copr.fedorainfracloud.org/coprs/medzik/jetbrains/
# sudo dnf copr enable medzik/jetbrains
sudo dnf install -y intellij-idea-ultimate
# sudo dnf install -y webstorm rustrover goland pycharm-professional datagrip
# sudo dnf install -y jetbrains-fleet
# sudo dnf install -y clion

# 查看环境变量配置，通过 sdkman 安装的所有候选都会自动配置环境变量，用户不需要自己再额外配置
# 可以通过将 PATH 中的冒号 : 替换为换行符，让 echo $PATH 的输出变成分行显示
echo "$PATH" | tr ':' '\n'
# 下载并安装 Android Studio
sudo dnf install -y android-studio
# 使用 Android Studio 中的 Android SDK 安装以下内容：
    # Android SDK Platform
    # Android SDK Platform-Tools
    # NDK (Side by side)
    # Android SDK Build-Tools
    # Android SDK Command-line Tools
# 配置 tauri 安卓 Android 所需的环境变量 https://tauri.app/zh-cn/start/prerequisites/#android
mkdir -p "$HOME/.Android/Sdk"
echo '
export ANDROID_HOME="$HOME/.Android/Sdk"
export NDK_HOME="$ANDROID_HOME/ndk/$(ls -1 $ANDROID_HOME/ndk)"
' >> ~/.bash_profile
source ~/.bash_profile
# 使用 rustup 添加 Android 编译目标：
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
# 创建 tauri 项目
cd ~/公共/Tauri
# bun create tauri-app --help
bun create tauri-app --manager bun --template vue-ts --yes tauri-app-demo
# 项目启动前操作
cd tauri-app && bun install
# 如果此处失败了，请在 android-studio 中点击  setting -> 搜索 Android SDK
bun run tauri android init
# 启动桌面应用程序
bun run tauri dev
# 启动 android 安卓应用程序，在运行该命令之前必须先在 android-studio 中运行内嵌手机，否则执行会卡住没反映
bun run tauri android dev

bun run --bun tauri android build


# 下载  jetbra.zip 以及获取 JetBrains 软件激活码
# https://3.jetbra.in/
# https://ipfs.io/ipfs/bafybeih65no5dklpqfe346wyeiak6wzemv5d7z2ya7nssdgwdz4xrmdu6i/
# https://bafybeih65no5dklpqfe346wyeiak6wzemv5d7z2ya7nssdgwdz4xrmdu6i.ipfs.dweb.link/


# 下载 jetbrains-toolbox 应用
echo "准备开始安装jetbrains-toolbox应用..."
if [ ! -d "WhiteSur-wallpapers" ]; then
    echo "正在安装WhiteSur壁纸..."
    # git clone https://github.com/vinceliuice/WhiteSur-wallpapers.git --depth=1
    git clone https://gitee.com/llf2635/linux.git --depth=1
    cd linux
    sudo dnf install -y unzip
    wget "https://ipfs.io/ipfs/bafybeih65no5dklpqfe346wyeiak6wzemv5d7z2ya7nssdgwdz4xrmdu6i/files/jetbra-8f6785eac5e6e7e8b20e6174dd28bb19d8da7550.zip"
    unzip jetbra.zip
    mv jetbra ~/.jetbra
    wget "https://download.jetbrains.com/toolbox/jetbrains-toolbox-2.6.2.41321.tar.gz"
    tar -xzf jetbrains-toolbox-2.6.2.41321.tar.gz
    cd jetbrains-toolbox-2.6.2.41321
    ./jetbrains-toolbox
    cd ..
    rm -rf jetbrains-toolbox-2.6.2.41321 jetbrains-toolbox-2.6.2.41321.tar.gz
fi


# IDEA 虚拟机配置文件存放位置
# nautilus ~/.config/JetBrains
# cat ~/.config/JetBrains/IntelliJIdea*/idea64.vmoptions


-Xms2g                # 初始堆内存（2GB），适合大多数中型项目
-Xmx8g                # 最大堆内存（8GB），如果你的机器内存足够，可以适当增加
-XX:ReservedCodeCacheSize=1g  # 设置代码缓存大小，优化性能
-XX:+UseZGC           # 使用 ZGC 垃圾回收器，提高大内存下的性能
-XX:MaxMetaspaceSize=1g      # 类元数据区最大值，1GB 对 IDEA 足够
-XX:+AlwaysPreTouch   # 提前加载内存页，减少堆分配时的延迟
-Dfile.encoding=UTF-8 # 设置文件编码为 UTF-8
-Duser.language=zh    # 设置系统语言为英文（英文可改为 en）
# -Duser.region=CN      # 设置地区为美国（英文地区可改为 US）
-Djdk.attach.allowAttachSelf=true	# 让 IDEA 可以用 JVM Attach API 给自己注入 agent（调试/监控相关）
-Dawt.useSystemAAFontSettings=lcd	# 改善字体渲染
-Dsun.io.useCanonCaches=true	# 开启路径规范化缓存，减少 I/O，提高性能



#=============================================================
#  JetBrains IDE 优化配置 (JDK 21 + Fedora 42)
#  适用于 IntelliJ IDEA / WebStorm / GoLand 等
#  内存建议：16GB+ 系统，堆内存 2G~4G
#=============================================================

# cat ~/.config/JetBrains/IntelliJIdea*/idea64.vmoptions
# 为 IntelliJIdea 配置虚拟机参数
echo "
-Xms2g
-Xmx8g
-XX:ReservedCodeCacheSize=1g
-XX:+UseZGC
-XX:MaxMetaspaceSize=1g
-XX:+AlwaysPreTouch
-Dfile.encoding=UTF-8
-Duser.language=zh
-Djdk.attach.allowAttachSelf=true
-Dawt.useSystemAAFontSettings=lcd
-Dsun.io.useCanonCaches=true
--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
-javaagent:/home/lcqh/.jetbra/ja-netfilter.jar=jetbrains
" | sudo tee -a ~/.config/JetBrains/IntelliJIdea*/idea64.vmoptions

# cat ~/.config/JetBrains/WebStorm*/webstorm64.vmoptions
# 为 WebStorm 配置虚拟机参数
echo "
-Xms2g
-Xmx8g
-XX:ReservedCodeCacheSize=1g
-XX:+UseZGC
-XX:MaxMetaspaceSize=1g
-XX:+AlwaysPreTouch
-Dfile.encoding=UTF-8
-Duser.language=zh
-Djdk.attach.allowAttachSelf=true
-Dawt.useSystemAAFontSettings=lcd
-Dsun.io.useCanonCaches=true
--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
-javaagent:/home/lcqh/.jetbra/ja-netfilter.jar=jetbrains
" | sudo tee -a ~/.config/JetBrains/WebStorm*/webstorm64.vmoptions

# cat ~/.config/JetBrains/RustRover*/rustrover64.vmoptions
# 为 RustRover 配置虚拟机参数
echo "
-Xms2g
-Xmx8g
-XX:ReservedCodeCacheSize=1g
-XX:+UseZGC
-XX:MaxMetaspaceSize=1g
-XX:+AlwaysPreTouch
-Dfile.encoding=UTF-8
-Duser.language=zh
-Djdk.attach.allowAttachSelf=true
-Dawt.useSystemAAFontSettings=lcd
-Dsun.io.useCanonCaches=true
--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
-javaagent:/home/lcqh/.jetbra/ja-netfilter.jar=jetbrains
" | sudo tee -a ~/.config/JetBrains/RustRover*/rustrover64.vmoptions

# cat ~/.config/JetBrains/GoLand*/goland64.vmoptions
# 为 GoLand 配置虚拟机参数
echo "
-Xms2g
-Xmx8g
-XX:ReservedCodeCacheSize=1g
-XX:+UseZGC
-XX:MaxMetaspaceSize=1g
-XX:+AlwaysPreTouch
-Dfile.encoding=UTF-8
-Duser.language=zh
-Djdk.attach.allowAttachSelf=true
-Dawt.useSystemAAFontSettings=lcd
-Dsun.io.useCanonCaches=true
--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
-javaagent:/home/lcqh/.jetbra/ja-netfilter.jar=jetbrains
" | sudo tee -a ~/.config/JetBrains/GoLand*/goland64.vmoptions

# cat ~/.config/JetBrains/PyCharm*/pycharm64.vmoptions
# 为 PyCharm 配置虚拟机参数
echo "
-Xms2g
-Xmx8g
-XX:ReservedCodeCacheSize=1g
-XX:+UseZGC
-XX:MaxMetaspaceSize=1g
-XX:+AlwaysPreTouch
-Dfile.encoding=UTF-8
-Duser.language=zh
-Djdk.attach.allowAttachSelf=true
-Dawt.useSystemAAFontSettings=lcd
-Dsun.io.useCanonCaches=true
--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
-javaagent:/home/lcqh/.jetbra/ja-netfilter.jar=jetbrains
" | sudo tee -a ~/.config/JetBrains/PyCharm*/pycharm64.vmoptions

# cat ~/.config/JetBrains/Clion*/clion64.vmoptions
# 为 PyCharm 配置虚拟机参数
echo "
-Xms2g
-Xmx8g
-XX:ReservedCodeCacheSize=1g
-XX:+UseZGC
-XX:MaxMetaspaceSize=1g
-XX:+AlwaysPreTouch
-Dfile.encoding=UTF-8
-Duser.language=zh
-Djdk.attach.allowAttachSelf=true
-Dawt.useSystemAAFontSettings=lcd
-Dsun.io.useCanonCaches=true
--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
-javaagent:/home/lcqh/.jetbra/ja-netfilter.jar=jetbrains
" | sudo tee -a ~/.config/JetBrains/Clion*/clion64.vmoptions

# cat ~/.config/JetBrains/DataGrip*/datagrip64.vmoptions
# 为 DataGrip 配置虚拟机参数
echo "
-Xms2g
-Xmx8g
-XX:ReservedCodeCacheSize=1g
-XX:+UseZGC
-XX:MaxMetaspaceSize=1g
-XX:+AlwaysPreTouch
-Dfile.encoding=UTF-8
-Duser.language=zh
-Djdk.attach.allowAttachSelf=true
-Dawt.useSystemAAFontSettings=lcd
-Dsun.io.useCanonCaches=true
--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
-javaagent:/home/lcqh/.jetbra/ja-netfilter.jar=jetbrains
" | sudo tee -a ~/.config/JetBrains/DataGrip*/datagrip64.vmoptions


# 清理临时文件
echo "正在清理临时文件..."
dnf clean all

echo "主题美化完成！请注销或重启系统以查看全部更改效果。"
echo "您可以使用GNOME Tweaks工具进一步自定义外观。"



# ===================================================================
#  JetBrains IDE 优化配置文件 (idea64.vmoptions)
#  适用环境：
#    - 操作系统：Fedora 42（Linux）
#    - JVM：JDK 21（推荐使用 Oracle JDK 或 OpenJDK 21+）
#    - IDE：IntelliJ IDEA、WebStorm、PyCharm、GoLand 等
#    - 物理内存建议：16GB ~ 32GB 系统，堆内存 2G~4G
#  优化目标：
#    - 降低内存占用
#    - 提升 UI 响应速度
#    - 减少 GC 卡顿
#    - 加快启动和索引性能
#  使用方式：
#    1. 在 IDE 启动界面点击齿轮图标 → "Custom VM Options"
#    2. 或手动编辑：
#       ~/.config/JetBrains/<Product><Version>/idea64.vmoptions
# ===================================================================

# 堆内存设置：平衡性能与内存占用
# 初始堆大小设为 512MB，避免启动时占用过多内存
-Xms1g
# 最大堆内存设为 4GB。足够应对大多数 Java/TS/Rust 项目。
# 若内存紧张可降为 -Xmx3g 或 -Xmx2g；大型项目可升至 -Xmx6g
-Xmx4g

# 代码缓存与元空间优化
# JIT 编译后的字节码缓存空间。增大可减少重复编译，提升响应速度
-XX:ReservedCodeCacheSize=512m
# 类元数据区初始大小。避免频繁动态扩展
# -XX:MetaspaceSize=256m
# 限制元空间最大值，防止因类加载过多导致内存溢出
# -XX:MaxMetaspaceSize=512m

# 使用 ZGC（低延迟垃圾回收器，JDK 21 推荐）
# JDK 21 默认支持 ZGC，延迟极低（通常 < 10ms），显著减少卡顿
# 替代 G1GC，特别适合交互式开发环境
-XX:+UseZGC
# ZGC 特有参数：建议 JVM 尽量保持堆在 3GB 以内，仅在必要时扩展到 -Xmx
# 有助于控制系统内存占用
-XX:SoftMaxHeapSize=3g
# 启用 ZGC 所需（在某些 OpenJDK 构建中需要）
-XX:+UnlockExperimentalVMOptions

# JVM 性能与编译优化
# 启用分层编译（解释执行 → C1 → C2），提升运行时性能
-XX:+TieredCompilation
# 限制 JIT 编译层级到 C1（简单优化），减少编译开销和内存使用
# 适合开发环境（非生产），加快响应
-XX:TieredStopAtLevel=1
# 并行处理软/弱/虚引用，减少 GC 停顿时间
-XX:+ParallelRefProcEnabled
-XX:+IgnoreUnrecognizedVMOptions
-XX:SoftRefLRUPolicyMSPerMB=50
-XX:CICompilerCount=2
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
-ea
-Dsun.io.useCanonCaches=false
-Djdk.http.auth.tunneling.disabledSchemes=""
-Djdk.attach.allowAttachSelf=true
-Djdk.module.illegalAccess.silent=true
-Dkotlinx.coroutines.debug=off

# UI 与图形渲染优化（Fedora 推荐）
# 启用高 DPI 缩放支持（HiDPI 屏幕友好）
-Dsun.java2d.uiScale.enabled=true
# 让 Java 应用感知系统 DPI 设置，避免模糊
-Dsun.java2d.dpiaware=true
# 启用窗口级双缓冲，减少重绘闪烁，提升 UI 流畅性
-Dswing.bufferPerWindow=true

# IDE 功能与行为优化
# 禁用 IDE 平台更新检查（可手动检查），减少后台任务
-Dide.no.platform.update=true
# 禁用启动时插件状态快照，加快启动速度
-Dide.plugins.snapshot.on.start=false
# 强制文件编码为 UTF-8
-Dfile.encoding=UTF-8
# 设置中文（简体）
-Duser.language=zh
# 设置区域格式，影响日期、数字、货币的显示形式（如 ¥ vs ￥）CN, US
# -Duser.region=CN
# 设置国家/地区代码，影响语言包加载（如界面语言）CN, US
# -Duser.country=CN

--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
-javaagent:/home/lcqh/.jetbra/ja-netfilter.jar=jetbrains

# 其他建议（不在 vmoptions 中，但相关）
# 1. 在 IDE 设置中：
#    - Settings → Plugins → 禁用不用的插件（如 Docker、Database、AI 工具）
#    - Settings → Directories → 将 node_modules、target、build 标记为 "Excluded"
#    - 启用 "Power Save Mode" 进行专注编码
# 2. 使用 JetBrains Toolbox 管理多个 IDE 版本
# 3. 避免使用 Flatpak 版本（沙盒限制多，性能较差）
# 4. 若使用 Rust 插件，确保启用 LSP 模式以减少资源占用
